/*
container/ring
环形双向链表

资料
https://www.jianshu.com/p/f1f5993c1d5b
*/

package main

import (
	"container/ring"
	"fmt"
)

func main() {
	// 创建一个循环双向链表，并初始化
	r := ring.New(10)
	for i := 1; i <= 10; i++ {
		r.Value = i
		r = r.Next()
	}

	// 1 2 3 4 5 6 7 8 9 10
	r.Do(func(i interface{}) {
		fmt.Print(i, " ")
	})
	fmt.Println()

	// 指针r在双向链表上移动的位置的个数。当n>0时，为正向移动；反之为反向移动。
	r = r.Move(3)

	// 4 5 6 7 8 9 10 1 2 3
	r.Do(func(i interface{}) {
		fmt.Print(i, " ")
	})
	fmt.Println()
}
